package leetcode.code0032;

/**
 * 错的，模拟栈不行，左括号会压着错误
"()(()"
 * @author CaoYu
 * @date 2021年11月25日
 * @description
 */
public class Solution1 extends Solution32 {

	@Override
	public int longestValidParentheses(String s) {
		if (s.length() == 0)
			return 0;
		char[] chars = s.toCharArray();
		int match = 0;// 模拟栈，匹配左右括号。出现左括号+1，出现右括号-1
		int max = 0;// 最长有效配对括号
		int count = 0;// 记录当前连续有效配对括号数量
		int p = 0;// 一直往前走
		while (p < chars.length) {
			if (chars[p] == '(') {
				match++;
			} else if (chars[p] == ')') {
				match--;
				if (match >= 0) {// 成功消除一对儿
					count += 2;// 两个成对，有效成对儿数量+2
				} else if (match < 0) {// 有多余的右括号，配不上对儿，结算答案
					max = Math.max(max, count);
					count = 0;// 重新数数
					match = 0;// 重新匹配
				}
			}
			p++;
		}
		max = Math.max(max, count);// p跳出循环，结算最后一个count
		return max;
	}

	public static void main(String[] args) {
		Solution1 so = new Solution1();
		so.debug1();
		so.debug2();
		so.debug3();
//		int r = 0;
//		r = so.longestValidParentheses(")())(((())(()())))");
//		System.out.println(r);
//		r = so.longestValidParentheses("()(()");
//		System.out.println(r);
//		r = so.longestValidParentheses("(()(()");
//		System.out.println(r);
	}

}
